home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Magazine / SoundLab / Studio16add / includes / Startup.asm < prev   
Encoding:
Assembly Source File  |  1997-11-26  |  6.9 KB  |  540 lines

  1. *****************************************************************************
  2. *    "Startup.asm"
  3. *
  4. *    $VER: Startup_asm stripped version 4.0 (15.03.97)
  5. *
  6. *    Copyright © 1995,1996 by Kenneth C. Nilsen/Digital Surface
  7. *    This source is freely distributable.
  8. *
  9. *    For instructions read the Startup_Asm.guide or the Startup_example.s
  10. *
  11. *****************************************************************************
  12.  
  13.     ifnd    CheckCPU
  14. CheckCPU    set    1
  15. Processor    =    68020
  16.     endc
  17.  
  18. zyxMax    = 17    ;max no. of libraries
  19. zyxBufZ    = 308    ;format buffer size
  20.  
  21. Return:    Macro
  22.     moveq    #\1,d0
  23.     rts
  24.     EndM
  25.  
  26. DefLib:    Macro
  27.  
  28.     lea    \1NamX(pc),a1
  29.     move.l    a1,(a5)+
  30.     move.l    a1,zyxNx
  31.     moveq    #\2,d0        ;if you use ver >127, change this to "move.l"
  32.     move.l    d0,(a5)+
  33.     move.l    d0,zyxVx
  34.     jsr    -552(a6)
  35.     move.l    d0,(a5)+
  36.  
  37.     move.l    d0,\1basX
  38.     bne.b    \1zyx
  39.  
  40.     bsr.w    zyxLibR
  41.     bra.b    \1zyx
  42.  
  43. \1basX:    dc.l    0
  44. \1NamX:    dc.b    "\1.library",0
  45.     even
  46. \1zyx:
  47.     EndM
  48.  
  49. DefEnd:    Macro
  50.     move.l    #-1,(a5)
  51.     rts
  52.     EndM
  53.  
  54. LibBase:    Macro
  55.     move.l    \1basX(pc),a6
  56.     EndM
  57.  
  58. TaskName:    Macro
  59.     move.l    zyxTask(pc),a0
  60.     move.l    #.taskN,10(a0)
  61.     bra.b    .zyxTsk
  62. .TaskN:    dc.b    \1
  63.     dc.b    0
  64.     even
  65. .zyxTsk:
  66.     EndM
  67.  
  68. TaskPri:    Macro
  69.     move.l    $4.w,a6
  70.     move.l    zyxTask(pc),a1
  71.     moveq    #\1,d0
  72.     jsr    -300(a6)
  73.     EndM
  74.  
  75. TaskPointer:    Macro
  76.     move.l    zyxTask(pc),d0
  77.     EndM
  78.  
  79. StartFrom:    Macro
  80.     move.l    RtnMess(pc),d0
  81.     EndM
  82.  
  83.  
  84. NextArg:    Macro
  85.     move.l    zyxArgP(pc),d0
  86.     beq.b    .noA\@
  87.     move.l    d0,a0
  88.     bsr.w    zyxGArg
  89.     move.l    a0,zyxArgP
  90. .noA\@    tst.l    d0
  91.     EndM
  92.  
  93. DebugDump    MACRO
  94.  
  95.     IFD    DODUMP
  96.  
  97. .StartDump\@:
  98.  
  99.     movem.l    d0-d7/a0-a6,-(sp)
  100.  
  101.     move.l    zyxDosBase(pc),a6
  102.     jsr    -60(a6)
  103.     move.l    d0,d1
  104.     bne.b    .ok\@
  105.  
  106.     move.l    zyxHandle(pc),d1
  107.     beq.b    .debEnd\@
  108.  
  109. .ok\@    move.l    #.string\@,d2
  110.     move.l    #.stringSize\@,d3
  111.     jsr    -48(a6)
  112.  
  113.     bra.b    .debEnd\@
  114.  
  115. .string\@        dc.b    "DEBUG DUMP: ",27,"[1m",\1,27,"[0m",10
  116. .stringSize\@    = *-.string\@
  117.     even
  118.  
  119. .debEnd\@
  120.     IFD    DEBUGHOLD
  121.     btst    #2,$dff016
  122.     bne.b    .debEnd\@
  123. .hold\@    btst    #2,$dff016
  124.     beq.b    .hold\@
  125.     ENDC
  126.     movem.l    (sp)+,d0-d7/a0-a6
  127.  
  128.     ENDC
  129.     ENDM
  130.  
  131. InitDebugHandler:    MACRO
  132.  
  133.     IFD    DODUMP
  134.  
  135.     tst.l    zyxHandle
  136.     bne.b    .exit
  137.  
  138.     move.l    zyxDosBase(pc),a6
  139.     jsr    -60(a6)
  140.     move.l    d0,zyxHandle
  141.     bne.b    .exit
  142.     st    zyxDebugHand
  143.     move.l    #.Dhand,d1
  144.     move.l    #1006,d2
  145.     jsr    -30(a6)
  146.     move.l    d0,zyxHandle
  147.     bra.b    .exit
  148.  
  149.     IFC    '\1',''
  150. .Dhand    dc.b    "CON:0/20/640/160/Debug Dump/CLOSE/WAIT",0
  151.     ENDC
  152.     IFNC    '\1',''
  153. .Dhand    dc.b    \1,0
  154.     ENDC
  155.     even
  156. .exit
  157.     ENDC
  158.     ENDM
  159.  
  160. InitArg    MACRO
  161.     move.l    #\1,zyxArgP
  162.     ENDM
  163.  
  164. InitArgs    MACRO
  165.     move.l    \1,zyxArgP
  166.     ENDM
  167.  
  168. Version:    Macro    ;obsolete!
  169.     NOP
  170.     EndM
  171.  
  172. ;--------------------------------------
  173.  
  174. GoZYX:    move.l    a0,-(sp)
  175.  
  176.     move.l    d0,zyxArgL
  177. ;    move.l    a0,zyxArgP
  178.  
  179.     move.l    $4.w,a6
  180.     move.l    a6,execbasX
  181.  
  182.     move.l    #zyxBufZ,d0
  183.     moveq    #1,d1
  184.     jsr    -198(a6)
  185.     move.l    d0,zyxBuff
  186.     beq.w    .DOS
  187.  
  188.     lea    zyxDos(pc),a1
  189.     moveq.l    #0,d0
  190.     jsr    -552(a6)
  191.     move.l    d0,zyxDosBase
  192.     beq.w    .DOS
  193.  
  194.     move.l    d0,a6
  195.     jsr    -534(a6)        ;GetArgStr()
  196.     move.l    d0,zyxArgP
  197.     move.l    execbasX(pc),a6
  198.  
  199.     sub.l    a1,a1
  200.     jsr    -294(a6)
  201.     move.l    d0,a4
  202.     move.l    d0,zyxTask
  203.  
  204.     tst.l    172(a4)
  205.     bne.b    .chkPro
  206.  
  207.     ifd    StartSkip
  208.     moveq    #StartSkip,d0
  209.     bne.b    .chkPro
  210.     endc
  211.     lea    92(a4),a0
  212.     jsr    -384(a6)
  213.     lea    92(a4),a0
  214.     jsr    -372(a6)
  215.     move.l    d0,RtnMess
  216.  
  217. .chkPro:
  218.     move.w    296(a6),d5
  219.  
  220.     IFD    CPUCHECK
  221.  
  222.     move.l    #Processor,d7
  223.     beq.w    .ProOk
  224.     cmp.w    #60,d7
  225.     ble.w    .nxPro1
  226.     sub.l    #68000,d7
  227.     beq.w    .ProOk
  228.  
  229. .nxPro1:
  230.     cmp.b    #10,d7
  231.     bne.b    .nxPro2
  232.     and.b    #$cf,d5
  233.     bne.w    .ProOk
  234.     bra.w    .ProErr
  235.  
  236. .nxPro2:
  237.     cmp.b    #20,d7
  238.     bne.b    .nxPro3
  239.     and.b    #$ce,d5
  240.     bne.w    .ProOk
  241.     bra.b    .ProErr
  242.  
  243. .nxPro3:
  244.     cmp.b    #30,d7
  245.     bne.b    .nxPro4
  246.     and.b    #$cc,d5
  247.     bne.b    .ProOk
  248.     bra.b    .ProErr
  249.  
  250. .nxPro4:
  251.     cmp.b    #40,d7
  252.     bne.b    .nxPro5
  253.     and.b    #$c8,d5
  254.     bne.b    .ProOk
  255.     bra.b    .ProErr
  256.  
  257. .nxPro5:
  258.     cmp.b    #60,d7
  259.     bne.b    .ProWho
  260.     btst    #7,d5
  261.     beq.b    .ProErr
  262.     btst    #6,d5
  263.     bne.b    .ProOk
  264.     bra.b    .ProErr
  265.  
  266. .ProWho:
  267.     lea    ProcWho(pc),a0
  268.     move.l    #Processor,ProcNum
  269.     lea    ProcNum(pc),a1
  270.     bsr.w    zyxPrt
  271.     bra.w    .End
  272.  
  273. .ProErr:
  274.     st    zyxLR
  275.     lea    ProcErr(pc),a0
  276.     add.l    #68000,d7
  277.     move.l    d7,ProcNum
  278.     lea    ProcNum(pc),a1
  279.     bsr.w    zyxPrt
  280.  
  281. .ProOk:
  282.     ENDC
  283.  
  284.     IFD    MATHCHECK
  285.  
  286.     move.l    #MathProc,d7
  287.     beq.w    .MathOk
  288.     sub.l    #68000,d7
  289.  
  290.     cmp.w    #881,d7
  291.     bne.b    .Math2
  292.     and.b    #$70,d5
  293.     bne.b    .MathOk
  294.     bra.b    .MathEr
  295.  
  296. .Math2:    cmp.w    #882,d7
  297.     bne.b    .Math3
  298.     and.b    #$60,d5
  299.     bne.b    .MathOk
  300.     bra.b    .MathEr
  301.  
  302. .Math3:    cmp.b    #60,d7
  303.     beq.b    .m60ok
  304.     cmp.b    #40,d7
  305.     bne.b    .MathEr
  306. .m60ok    btst    #6,d5
  307.     bne.b    .MathOk
  308.  
  309. .MathEr:
  310.     st    zyxLR
  311.     lea    ProcErr(pc),a0
  312.     move.l    #MathProc,ProcNum
  313.     lea    ProcNum(pc),a1
  314.     bsr.w    zyxPrt
  315.  
  316.     ENDC
  317.  
  318. .MathOk:
  319.     bsr.w    zyxLibO
  320.  
  321.     tst.b    zyxLR
  322.     bne.b    .noShow
  323.  
  324.     move.l    zyxArgP(pc),a0
  325.     move.l    zyxArgL(pc),d0
  326.  
  327.     bsr.w    Start
  328.     move.l    d0,zyxVal
  329.  
  330. .noShow:
  331.     bsr.w    zyxLibC
  332.  
  333. .End:    move.l    zyxBuff(pc),d0
  334.     beq.b    .noBuff
  335.     move.l    d0,a1
  336.     move.l    #zyxBufZ,d0
  337.     jsr    -210(a6)
  338.  
  339.     IFD    DODUMP
  340.  
  341.     tst.b    zyxDebugHand
  342.     beq.b    .none
  343.  
  344.     move.l    zyxDosBase(pc),a6
  345.     move.l    zyxHandle(pc),d1
  346.     beq.b    .none
  347.     jsr    -36(a6)
  348. .none    move.l    $4.w,a6
  349.  
  350.     ENDC
  351.  
  352.     move.l    zyxDosBase(pc),a1
  353.     jsr    -414(a6)
  354.  
  355. .noBuff:
  356.     tst.l    RtnMess
  357.     beq.w    .DOS
  358.  
  359.     jsr    -132(a6)
  360.     move.l    RtnMess(pc),a1
  361.     jsr    -378(a6)
  362.  
  363. .DOS:    move.l    (sp)+,a0
  364.     move.l    zyxVal(pc),d0
  365.     rts
  366.  
  367. zyxDo:    move.b    d0,(a3)+
  368.     rts
  369.  
  370. zyxPrt:    movem.l    d0-a6,-(sp)
  371.  
  372.     lea    zyxDo(pc),a2
  373.     move.l    zyxBuff(pc),a3
  374.     jsr    -522(a6)
  375.  
  376.     move.l    zyxDosBase(pc),a6
  377.  
  378.     jsr    -60(a6)
  379.     move.l    d0,d1
  380.     beq.b    .clDos
  381.  
  382.     move.l    zyxBuff(pc),d2
  383.     move.l    d2,a0
  384.     moveq    #0,d3
  385. .count:    addq    #1,d3
  386.     tst.b    (a0)+
  387.     bne.b    .count
  388.  
  389.     subq    #1,d3
  390.  
  391.     jsr    -48(a6)
  392.  
  393. .clDos:    lea    (a6),a1
  394.     move.l    $4.w,a6
  395.     jsr    -414(a6)
  396.  
  397. .exit:    movem.l    (sp)+,d0-a6
  398.     rts
  399.  
  400. zyxLibO:
  401.     move.l    #4*3*zyxMax,d0
  402.     moveq    #1,d1
  403.     jsr    -198(a6)
  404.     move.l    d0,zyxMem
  405.     beq.b    .memErr
  406.  
  407.     move.l    d0,a5
  408.     bsr.w    Init
  409.  
  410.     rts
  411.  
  412. .memErr:
  413.     lea    zyxFR(pc),a0
  414.     lea    zyxMeR(pc),a1
  415.  
  416.     bsr.w    zyxPrt
  417.  
  418.     st    zyxLR
  419.     rts
  420.  
  421. zyxLibC:
  422.     move.l    $4.w,a6
  423.  
  424.     move.l    zyxMem(pc),d0
  425.     beq.w    .noLibs
  426.     move.l    d0,a5
  427.  
  428. .loop:    cmp.l    #-1,(a5)
  429.     beq.b    .clEnd
  430.     move.l    8(a5),d0
  431.     beq.b    .noCl
  432.     move.l    d0,a1
  433.     jsr    -414(a6)
  434. .noCl:    lea    12(a5),a5
  435.     bra.b    .loop
  436.  
  437. .clEnd:    move.l    zyxMem(pc),a1
  438.     move.l    #4*3*zyxMax,d0
  439.     jsr    -210(a6)
  440.  
  441. .noLibs:
  442.     rts
  443.  
  444. zyxLibR:
  445.     st    zyxLR
  446.  
  447.     lea    zyxLib(pc),a0
  448.     lea    zyxNx(pc),a1
  449.     bsr.w    zyxPrt
  450.  
  451.     rts
  452.  
  453. zyxGArg:
  454.     move.b    (a0)+,d0
  455.     beq.w    .end
  456.     cmp.b    #10,d0
  457.     beq.w    .end
  458.     cmp.b    #9,d0
  459.     beq.b    zyxGArg
  460.     cmp.b    #32,d0
  461.     beq.b    zyxGArg
  462.  
  463.     move.l    zyxBuff(pc),a1
  464.     lea    -1(a0),a0
  465. .copy:    move.b    (a0)+,d0
  466.     beq.b    .stop
  467.     cmp.b    #10,d0
  468.     beq.b    .stop
  469.     cmp.b    #32,d0
  470.     beq.b    .eol
  471. .cont:    cmp.b    #'*',d0
  472.     beq.b    .chkSpc
  473.     cmp.b    #'"',d0
  474.     beq.b    .toggle
  475. .noChk:    move.b    d0,(a1)+
  476. .cont2:    bra.b    .copy
  477.  
  478. .chkSpc:
  479.     cmp.b    #'"',(a0)
  480.     bne.b    .chk2
  481.     move.b    #'"',(a1)+
  482.     lea    1(a0),a0
  483.     bra.b    .copy
  484. .chk2:    cmp.b    #'n',(a0)
  485.     bne.b    .noChk
  486.     move.b    #10,(a1)+
  487.     lea    1(a0),a0
  488.     bra.b    .copy
  489.  
  490. .toggle:
  491.     tst.b    zyxQ
  492.     beq.b    .set
  493.     sf    zyxQ
  494.     bra.b    .stop
  495. .set:    st    zyxQ
  496.     bra.b    .cont2
  497.  
  498. .eol:    tst.b    zyxQ
  499.     bne.b    .cont
  500.  
  501. .stop:    tst.b    zyxQ
  502.     bne.b    .end
  503.     clr.b    (a1)
  504.     move.l    zyxBuff(pc),d0
  505.     rts
  506.  
  507. .end:    moveq    #0,d0
  508.     rts
  509.  
  510. RtnMess:    dc.l    0
  511. ProcNum:    dc.l    0
  512. execbasX:    dc.l    0
  513. zyxArgL:    dc.l    0
  514. zyxArgP:    dc.l    0
  515. zyxVal:        dc.l    0
  516. zyxMem:        dc.l    0
  517. zyxNx:        dc.l    0
  518. zyxVx:        dc.l    0
  519.     IFD    DODUMP
  520. zyxHandle:    dc.l    0
  521.     ENDC
  522. zyxDosbase    dc.l    0
  523. zyxTask:    dc.l    0
  524. zyxBuff:    dc.l    0
  525. zyxMeR:        dc.l    zyxMemR
  526.     IFD    DODUMP
  527. zyxDebugHand:    dc.b    0
  528.     ENDC
  529. zyxLR:        dc.b    0
  530. zyxQ:        dc.b    0
  531.  
  532. zyxDos:        dc.b    'dos.library',0
  533. zyxLib:        dc.b    "Can't open %s v. %ld",10,0
  534. zyxMemR:    dc.b    'Low memory!',10,0
  535. zyxFR:        dc.b    '%s',0
  536. ProcWho:    dc.b    'Right! %ld ?',10,0
  537. ProcErr:    dc.b    'Need %ld or better!',10,0
  538.         dc.b    "NewStartup 4.0 (15.3.97)",0
  539.         even
  540.